﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;
using System.Data.Linq;

namespace Cotizav
{
    public class CtrlContactos
    {
        ConexionDataContext conexion;
        
        internal List<CONTACTO> getListContacto(string idCliente)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    DataLoadOptions dlo = new DataLoadOptions();
                    dlo.LoadWith<CONTACTO>(d => d.CLIENTE);
                    conexion.LoadOptions = dlo;

                    return conexion.CONTACTO.Where(x => x.idcliente == idCliente && x.eliminado == 0).ToList<CONTACTO>();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal string registrarContacto(CONTACTO con, CLIENTE client)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        int correlativoContacto = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").CONTACTO.Value;
                        string num = Convert.ToString(correlativoContacto);
                        string numero = num.Trim().PadLeft(10,'0');
                        string idContacto = "CONT_"+ numero;

                        con.idcliente = client.idCliente;
                        con.idContacto = idContacto;
                        con.statusflag = string.Empty;

                        //insertamos
                        conexion.CONTACTO.InsertOnSubmit(con);
                        conexion.SubmitChanges();
                        conexion.increm_ContContacto();
                        
                        transactionScope.Complete();
                        return idContacto;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal void eliminarContacto(CONTACTO conDelete, CLIENTE client)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    CONTACTO con = conexion.CONTACTO.Single(x => x.idContacto == conDelete.idContacto && x.idcliente == client.idCliente && x.eliminado == 0);
                    con.statusflag = string.Empty;
                    con.eliminado = 1;

                    conexion.SubmitChanges();
                }
                catch(Exception)
                {
                    throw;
                }
            }
        }

        internal void actualizarContacto(CONTACTO conUpd, CLIENTE client)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    CONTACTO con = conexion.CONTACTO.Single(x => x.idContacto == conUpd.idContacto && x.idcliente == conUpd.idcliente && x.eliminado == 0);

                    con.nombre = conUpd.nombre;
                    con.cargo = conUpd.cargo;
                    con.email = conUpd.email;
                    con.telefono = conUpd.telefono;
                    con.fax = conUpd.fax;
                    con.celular = conUpd.celular;
                    con.nextel = conUpd.nextel;
                    con.rpc = conUpd.rpc;
                    con.rpm = conUpd.rpm;
                    con.statusflag = string.Empty;

                    conexion.SubmitChanges();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal CONTACTO getContacto(string idcontacto)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    DataLoadOptions dlo = new DataLoadOptions();
                    dlo.LoadWith<CONTACTO>(c => c.CLIENTE);
                    conexion.LoadOptions = dlo;
                    return conexion.CONTACTO.SingleOrDefault(x => x.idContacto == idcontacto && x.eliminado == 0);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
    }
}
